package net.esj.basic.servlet;

import java.io.File;
import java.io.IOException;
import java.util.Calendar;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import net.esj.basic.utils.UUIDCreator;

import org.apache.commons.collections.map.HashedMap;
import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.FileUploadException;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;

@SuppressWarnings("serial")
public class Upload extends HttpServlet {
	
	
	
	@Override
	protected void doGet(HttpServletRequest req, HttpServletResponse resp)
			throws ServletException, IOException {
		doPost(req, resp);
	}

	@SuppressWarnings("unchecked")
	public void doPost(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		//路径
		//String savePath =Config.getFileUploadPath();
		String savePath = this.getServletConfig().getServletContext().getRealPath("");
		DiskFileItemFactory fac = new DiskFileItemFactory();
		ServletFileUpload upload = new ServletFileUpload(fac);
		upload.setHeaderEncoding("utf-8");
		List fileList = null;
		try {
			fileList = upload.parseRequest(request);
		} catch (FileUploadException ex) {
			ex.printStackTrace();
			return;
		}
		Iterator<FileItem> it = fileList.iterator();
		String name = "";
		String extName = "";
		String pathStr = "";
		String fieldName = "";
		while (it.hasNext()) {
			FileItem item = it.next();
			if (!item.isFormField()) {
				name = item.getName();
				Calendar c = Calendar.getInstance();
				fieldName = item.getFieldName();
				
				if(!fieldName.endsWith(File.separator)){
					fieldName += File.separator;
				}
				
				pathStr = c.get(Calendar.YEAR) + File.separator + (c.get(Calendar.MONTH)+1)  + File.separator + c.get(Calendar.DAY_OF_MONTH) + File.separator;
				
				long size = item.getSize();
				String type = item.getContentType();
				System.out.println(size+"字节" + " " + type);
				if (name == null || name.trim().equals("")) {
					continue;
				}
				if (name.lastIndexOf(".") >= 0) {
					extName = name.substring(name.lastIndexOf("."));
				}
				
				savePath = savePath + File.separator + "melon_upload" + File.separator +fieldName + pathStr ;
				
				if(!savePath.endsWith(File.separator)){
					savePath += File.separator;
				}
				
				File f1 = new File(savePath);
				
				if (!f1.exists()) {
					f1.mkdirs();
				}
				
				File file = null;
				do {
					name = UUIDCreator.create();
					file = new File(savePath + name + extName);
				} while (file.exists());
				
				File saveFile = new File(savePath + name + extName);
				try {
					item.write(saveFile);
				} catch (Exception e) {
					e.printStackTrace();
				}
			}
		}
//		response.getWriter().print(name + extName);
//		invoke(request, response,pathStr + name + extName);
		response.getWriter().print(pathStr + name + extName);
	}
	
	protected void invoke(HttpServletRequest request, HttpServletResponse response,String fileName){
		
	}
}